\section{Exemple d'un programme dSL}
\label{dslProgExample}

Un programme \textsl{dSL} est structuré en cinq parties: 	\\

\begin{itemize}
	\item Une partie de déclaration de \texttt{GLOBAL\_VAR} (éventuellement des \texttt{CLASS});
	\item Une partie de déclaration de \texttt{METHOD} ;
	\item Une partie de déclaration de \texttt{SEQUENCE} ;
	\item Une partie de déclaration de \texttt{WHEN} ;
	\item La partie d'initialisation du programme: \texttt{PROGRAM}.
\end{itemize}

\bigskip
Nous allons illustrer ces différentes parties à l'aide d'un exemple, provenant de~\cite{BDeW}. Cet exemple est un système de contrôle de température qui fonctionne comme suit: si la température passe en dessous de 0°C, le système allume le chauffage, tandis que si la température passe au-dessus de 20°C, le chauffage est éteint. De plus, il y a un panneau de contrôle composé d'un voyant qui indique si le chauffage est allumé ou éteint, ainsi qu'une alarme qui se déclenche lorsque le chauffage a été allumé et éteint plus de 1000 fois. Au niveau des variables, le capteur de température est lié à la variable \texttt{temperature}, l'allumage du chauffage à la variable \texttt{state}, le voyant à la variable \texttt{led} et l'alarme à la variable \texttt{alarm}. Il y a donc deux sites pour cette application: le site du chauffage et le site du panneau de contrôle. Les variables \texttt{temperature} et \texttt{state} doivent se situer, logiquement, sur le site du chauffage, tandis que les variables \texttt{led} et \texttt{alarm} doivent se situer sur le site du panneau de contrôle. La figure~\ref{fig-dsl-ex-01} montre le code complet de l'application. \\

\begin{figure}[!h]
	\begin{center}
		{\small
		\begin{alltt}
			01:   CLASS Heater
			02:       control        : INT;
			03:       maintenance    : BOOL;
			04:       state          : BOOL;
			05:   END_CLASS
			
			06:   GLOBAL_VAR
			07:       heater         : Heater;
			08:       temperature    : INT;
			09:       fuel_cost      : INT;
			10:       alarm          : BOOL;
			11:       led            : BOOL;
			12:   END_VAR
			
			13:   SEQUENCE set_heater (new_state : BOOL)
			14:       heater.state := new_state;
			15:       IF heater.state THEN
			16:           led        := TRUE;
			17:           fuel_cost  := fuel_cost + 10;
			18:       ELSE
			19:           led := FALSE;
			20:       END_IF
			21:       heater.control := heater.control + 1;
			22:   END_SEQUENCE
			
			23:   WHEN heater.control == 1000 THEN
			24:       control := 0;
			25:       maintenance := TRUE;
			26:   END_WHEN
			
			27:   WHEN heater.maintenance THEN
			28:       alarm := TRUE;
			29:   END_WHEN
			
			30:   WHEN ~temperature < 0 THEN
			31:       IF (NOT heater.maintenance) THEN
			32:           LAUNCH set_heater(1);
			33:       END_IF
			34:   END_WHEN
			
			35:   WHEN ~temperature > 20 THEN
			36:       IF (NOT heater.maintenance) THEN
			37:           LAUNCH set_heater(0);
			38:       END_IF
			39:   END_WHEN
			
			40:  PROGRAM
			41:      heater.control := 0;
			42:      heater.maintenance := FALSE;
			43:      LAUNCH set_heater(temperature < 0);
			44:  END_PROGRAM
		\end{alltt}
		}
		\caption{Le code \textsl{dSL} d'un système de contrôle de température}
		\label{fig-dsl-ex-01}
	\end{center}
\end{figure}